package sword_offer;

/**
 * @ClassName _57_1twoSum
 * @Description: 输入一个递增排序的数组和一个数字s，在数组中查找两个数，使得它们的和正好是s。如果有多对数字的和等于s，则输出任意一对即可。
 *
 *  
 *
 * 示例 1：
 *
 * 输入：nums = [2,7,11,15], target = 9
 * 输出：[2,7] 或者 [7,2]
 * 示例 2：
 *
 * 输入：nums = [10,26,30,31,47,60], target = 40
 * 输出：[10,30] 或者 [30,10]
 *  
 *
 * 限制：
 *
 * 1 <= nums.length <= 10^5
 * 1 <= nums[i] <= 10^6
 *
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/he-wei-sde-liang-ge-shu-zi-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 * @Author: yongliang.ma
 * @Create_time:2022/10/12 21:47
 */
public class _57_1twoSum {

    // 由于是递增数组，所以试用双指针
    public int[] twoSum(int[] nums, int target) {
        if (nums.length < 2)
            return null;

        int head = 0, tail = nums.length - 1;
        while (tail > head){
            if (nums[head] + nums[tail] > target){
                tail--;
            }else if (nums[head] + nums[tail] < target){
                head++;
            }else {
                return new int[]{nums[head], nums[tail]};
            }
        }

        return null;
    }
}
